package com.company.genealogy.web.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.company.genealogy.web.entity.Member;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

@Mapper
public interface MemberMapper extends BaseMapper<Member> {
    
    /**
     * 分页查询成员列表（包含关联名称）
     */
    IPage<Member> selectMemberListWithPage(Page<Member> page,
                                           @Param("name") String name,
                                           @Param("gender") String gender,
                                           @Param("clanId") Long clanId,
                                           @Param("branchId") Long branchId);
    
    /**
     * 查询成员列表（包含关联名称）
     */
    List<Member> selectMemberList(@Param("name") String name, 
                                  @Param("gender") String gender,
                                  @Param("clanId") Long clanId,
                                  @Param("branchId") Long branchId);

    /**
     * 查询成员详情（包含关联名称）
     */
    Member selectMemberDetail(@Param("id") Long id);

    // 按分支和世代统计人数
    List<Map<String, Object>> countByBranchAndGeneration(@Param("clanId") Long clanId);
    // 按分支统计总人数
    List<Map<String, Object>> countByBranch(@Param("clanId") Long clanId);
    
    // 新增方法：按家族ID统计总人数
    Integer countTotalMembersByClanId(@Param("clanId") Long clanId);
    
    // 新增方法：获取最大世代数
    Integer getMaxGenerationByClanId(@Param("clanId") Long clanId);
    
    // 新增方法：统计活跃成员数
    Integer countActiveMembersByLogin(@Param("clanId") Long clanId);
    
    // 新增方法：按分支统计人口分布
    List<Map<String, Object>> getPopulationByBranch();
    
    // 新增方法：按地区统计人口分布
    List<Map<String, Object>> getPopulationByRegion();
    
    // 新增方法：各世代人数统计
    List<Map<String, Object>> getGenerationStats();
    
    // 新增方法：世代人数趋势
    List<Map<String, Object>> getGenerationTrend();
    
    // 新增方法：获取成员基本信息
    Map<String, Object> selectMemberBasicInfo(@Param("id") Long id);
} 